package cc.rengu.igas.channel.upac.facade;

import cc.rengu.igas.channel.upac.facade.request.*;
import cc.rengu.igas.channel.upac.facade.response.*;
import cc.rengu.igas.channel.upac.facade.result.Result;

/**
 * 银联全渠道业务API组件
 * Created by 王成 on 2019/2/26.
 */
public interface UpacService {


    /**
     * 银联全渠道交易状态查询服务
     *
     * @param upacTransStateQueryRequest 交易状态查询请求
     * @return 交易状态查询应答
     * @
     */
    Result<UpacTransStateQueryResponse> upacTransStatusQuery(UpacTransStateQueryRequest upacTransStateQueryRequest);


    /**
     * 银联全渠道消费撤销
     *
     * @param tokenConsumeCancelRequest 消费撤销请求
     * @return 消费撤销应答
     * @ 异常
     */
    Result<TokenConsumeCancelResponse> upacConsumeCancel(TokenConsumeCancelRequest tokenConsumeCancelRequest);

    /**
     * 银联全渠道消费退货服务
     *
     * @param upacConsumeRefundRequest 退货请求
     * @return 退货应答
     * @ 异常
     */
    Result<UpacConsumeRefundResponse> upacConsumeRefund(UpacConsumeRefundRequest upacConsumeRefundRequest);


    /**
     * 银联全渠道账单查询
     *
     * @param upacBillQueryRequest 账单查询请求
     * @return 账单查询应答
     * @ 异常
     */
    Result<UpacBillQueryResponse> upacBillQuery(UpacBillQueryRequest upacBillQueryRequest);

    /**
     * 银联全渠道账单支付
     *
     * @param upacBillPayRequest 账单支付请求
     * @return 账单支付应答
     * @ 异常
     */
    Result<UpacBillPayResponse> upacBillPay(UpacBillPayRequest upacBillPayRequest);

    /**
     * 银联全渠道建立委托关系
     *
     * @param upacEstablishEntrustRequest
     * @return 建立委托关系应答
     * @
     */
    Result<UpacEstablishEntrustResponse> establishEntrust(UpacEstablishEntrustRequest upacEstablishEntrustRequest);

    /**
     * 银联全渠道解除委托关系
     *
     * @param upacUndelegationRequest
     * @return 解除委托关系应答
     * @
     */
    Result<UpacUndelegationResponse> undelegation(UpacUndelegationRequest upacUndelegationRequest);

}
